home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DS-CD ROM 2 1993 August
/
DS CD-ROM 2.Ausgabe (August 1993).iso
/
programm
/
ds0257
/
lib.exe
/
RECORDIO.LIB
< prev
next >
Wrap
Text File
|
1992-02-22
|
14KB
|
926 lines
#IF !LIB4A86
#ELSE
#IF !INTERN_LIB4A86_S
INTERN_LIB4A86_S EQU 01
JMP START
#ENDIF
#ENDIF
RFOPENMODE DB 002H
DB 03DH
CREATERFILEATTR DW 0H
RF_WRITETHROUGH EQU 01H
RF_IGNORELRU EQU 02H
RF_DONTWRITETHROUGH EQU NOT RF_WRITETHROUGH
RF_DONTIGNORELRU EQU NOT RF_IGNORELRU
RFILETABLEERROR EQU 08601H
RFILENOTOPEN EQU 08602H
RFILEALREADYOPEN EQU 08603H
RFILEREADERROR EQU 08604H
RFILEWRITEERROR EQU 08605H
RFILERECORDERROR EQU 08606H
RFILELENGTHERROR EQU 08607H
RFILEDEVICEERROR EQU 08608H
RFILEHEADERERROR EQU 08609H
MAXRF_BUFFER EQU 250XD
RF_TABLECLOSED EQU 0FFFFH
RF_STRUC STRUC
RF_HANDLE DW ?
RF_LASTRECORD DW ?,?
RF_HEADERLENGTH DW ?,?
RF_RECORDLENGTH DW ?
RF_FILEPOINTER DW ?,?
RF_BUFFERCOUNT DW ?
RF_BUFFERLENGTH DW ?
RF_FLAGS DB ?
RF_FILEEMPTY DB ?
RF_BUFFERS DW
ENDS
RF_BUFFERHEADER STRUC
RF_BUFFERLRU DB ?
RF_BUFFERUSED DB ?
RF_BUFFERPTR DW ?,?
RF_BUFFERFPOINTER DW ?,?
ENDS
RF_BUFFERNOTUSED EQU 00H
RF_BUFFERREAD EQU 01H
RF_BUFFERWRITTEN EQU 02H
RF_L_BP EQU [BP+00H]
RF_L_AX EQU [BP+02H]
RF_L_BX EQU [BP+04H]
RF_L_CX EQU [BP+06H]
RF_L_DX EQU [BP+08H]
RF_L_DI EQU [BP+0AH]
RF_L_SI EQU [BP+0CH]
RF_LOKALVAR1 EQU [BP-02H]
RF_LOKALVAR2 EQU [BP-04H]
RF_LOKALVAR3 EQU [BP-06H]
M0 DW 0
INTERN_CHECKRFFILECLOSED:
CMP RF_HANDLE[BX],RF_TABLECLOSED
JE >L1
MOV AX,RFILEALREADYOPEN
JMP >L8
INTERN_CHECKRFFILEOPEN:
CMP RF_HANDLE[BX],RF_TABLECLOSED
JE >L80
L1:
CLI
POP CS:M0
PUSH SI,DI,DX,CX,BX,AX
PUSH BP
MOV BP,SP
SUB SP,06
PUSH CS:M0
STI
MOV SI,BX
RET
L80:
MOV AX,RFILENOTOPEN
L8:
ADD SP,2
STC
RET
INTERN_ENDROUTINE:
MOV SP,BP
POP BP
POP BX
JC >L1
MOV AX,BX
JMP >L2
L1:
MOV BX,-1
MOV RF_FILEPOINTER[SI],BX
MOV RF_FILEPOINTER[SI+2],BX
L2:
POP BX,CX,DX,DI,SI
RET
RESETRECORDFILE:
CALL INTERN_CHECKRFFILECLOSED
MOV AX,W CS:RFOPENMODE
CALL INTERN_PREPARERECORDFILE
JC >L8
MOV AX,04202H
XOR CX,CX
XOR DX,DX
INT 021H
JC >L8
MOV CX,RF_HEADERLENGTH[SI+2]
MOV BX,RF_HEADERLENGTH[SI]
CMP DX,CX
JB >L81
JA >L1
CMP AX,BX
JA >L1
JE >L2
L81:
MOV AX,RFILELENGTHERROR
JMP >L8
L1:
PUSH AX,DX
SUB AX,BX
SBB DX,CX
MOV BX,RF_RECORDLENGTH[SI]
XOR CX,CX
CALL DIVLONGINT
OR BX,CX
JNZ L81
POP DX,AX
SUB AX,RF_RECORDLENGTH[SI]
SBB DX,0
MOV RF_LASTRECORD[SI],AX
MOV RF_LASTRECORD[SI+2],DX
MOV RF_FILEEMPTY[SI],0FFH
L2:
XOR AX,AX
XOR DX,DX
CALL INTERN_SETFILEPOINTER
JNC >L9
L8:
MOV BX,RF_TABLECLOSED
XCHG BX,RF_HANDLE[SI]
CMP BX,RF_TABLECLOSED
JE >L82
PUSH AX
MOV AH,03EH
INT 021H
POP AX
L82:
STC
L9:
JMP INTERN_ENDROUTINE
CREATERECORDFILE:
MOV AH,03CH
JMP >L1
CREATENEWRECORDFILE:
MOV AH,05BH
L1:
CALL INTERN_CHECKRFFILECLOSED
CALL INTERN_PREPARERECORDFILE
JC L8
JMP INTERN_ENDROUTINE
CLOSERECORDFILE:
CALL INTERN_CHECKRFFILEOPEN
CALL INTERN_FLUSHRECORDFILE
MOV BX,RF_TABLECLOSED
XCHG RF_HANDLE[SI],BX
MOV AH,03EH
INT 021H
JMP INTERN_ENDROUTINE
FLUSHRECORDFILE:
CALL INTERN_CHECKRFFILEOPEN
CALL INTERN_FLUSHRECORDFILE
JMP INTERN_ENDROUTINE
READRECORD:
CALL INTERN_CHECKRFFILEOPEN
CALL INTERN_TESTRECORD
JC >L10
JNZ >L1
L10:
MOV AX,RFILERECORDERROR
STC
JMP >L9
L1:
CALL INTERN_GETBUFFER
JNC >L2
TEST RF_BUFFERUSED[DI],RF_BUFFERWRITTEN
JZ >L1
CALL INTERN_WRITERECORDBUFFER
JC >L9
L1:
MOV RF_BUFFERFPOINTER[DI],AX
MOV RF_BUFFERFPOINTER[DI+2],DX
CALL INTERN_READRECORDBUFFER
JC >L9
MOV AX,RF_BUFFERPTR[DI]
MOV DX,RF_BUFFERPTR[DI+2]
L2:
OR RF_BUFFERUSED[DI],RF_BUFFERREAD
PUSH ES,DS,DI,SI
MOV CX,RF_RECORDLENGTH[SI]
MOV DI,RF_L_DI
MOV SI,AX
MOV DS,DX
CLD
SHR CX,1
IF C MOVSB
REP MOVSW
POP SI,DI,DS,ES
CLC
L9:
JMP INTERN_ENDROUTINE
TESTRECORD:
CALL INTERN_CHECKRFFILEOPEN
CALL INTERN_TESTRECORD
JMP INTERN_ENDROUTINE
WRITERECORD:
CALL INTERN_CHECKRFFILEOPEN
MOV BX,RF_LASTRECORD[SI]
MOV RF_LOKALVAR2,BX
MOV BX,RF_LASTRECORD[SI+2]
MOV RF_LOKALVAR3,BX
CALL INTERN_TESTRECORD
JC >L9
JNZ >L1
MOV RF_LOKALVAR2,AX
MOV RF_LOKALVAR3,DX
L1:
CALL INTERN_GETBUFFER
JNC >L2
TEST RF_BUFFERUSED[DI],RF_BUFFERWRITTEN
JZ >L1
CALL INTERN_WRITERECORDBUFFER
JC >L9
L1:
MOV RF_BUFFERFPOINTER[DI],AX
MOV RF_BUFFERFPOINTER[DI+2],DX
MOV CX,RF_RECORDLENGTH[SI]
CMP RF_BUFFERLENGTH[SI],CX
JE >L1
CALL INTERN_READRECORDBUFFER
JC >L9
L1:
MOV AX,RF_BUFFERPTR[DI]
MOV DX,RF_BUFFERPTR[DI+2]
L2:
L1:
OR RF_BUFFERUSED[DI],RF_BUFFERWRITTEN OR RF_BUFFERREAD
PUSH ES,DS,DI,SI
MOV CX,RF_RECORDLENGTH[SI]
MOV DS,ES
MOV SI,RF_L_DI
MOV ES,DX
MOV DI,AX
CLD
SHR CX,1
IF C MOVSB
REP MOVSW
POP SI,DI,DS,ES
PUSH AX
MOV AX,RF_LOKALVAR2
MOV RF_LASTRECORD[SI],AX
MOV AX,RF_LOKALVAR3
MOV RF_LASTRECORD[SI+2],AX
POP AX
TEST RF_FLAGS[SI],RF_WRITETHROUGH
JE >L1
CALL INTERN_WRITERECORDBUFFER
JC >L9
AND RF_BUFFERUSED[DI],NOT RF_BUFFERWRITTEN
L1:
MOV RF_FILEEMPTY[SI],0FFH
CLC
L9:
JMP INTERN_ENDROUTINE
GETRECORDFILESIZE:
CALL INTERN_CHECKRFFILEOPEN
CMP RF_FILEEMPTY[SI],0
JNE >L1
MOV AX,RF_HEADERLENGTH[SI]
MOV DX,RF_HEADERLENGTH[SI+2]
MOV RF_L_AX,AX
MOV RF_L_DX,DX
XOR AX,AX
XOR DX,DX
JMP >L2
L1:
MOV AX,RF_LASTRECORD[SI]
MOV DX,RF_LASTRECORD[SI+2]
ADD AX,RF_RECORDLENGTH[SI]
ADC DX,0
MOV RF_L_AX,AX
MOV RF_L_DX,DX
SUB AX,RF_HEADERLENGTH[SI]
SUB DX,RF_HEADERLENGTH[SI+2]
MOV BX,RF_RECORDLENGTH[SI]
XOR CX,CX
CALL DIVLONGINT
L2:
MOV RF_L_CX,DX
MOV RF_L_BX,AX
CLC
JMP INTERN_ENDROUTINE
SETRECORDFILESIZE:
CALL INTERN_CHECKRFFILEOPEN
MOV BX,AX
OR BX,DX
MOV BL,0
JZ >L1
DEC AX
SBB DX,0
DEC BL
L1:
MOV RF_LOKALVAR3,BL
CALL INTERN_GETRECORDADRESS
JC >L8
PUSH DX,AX
CMP B RF_LOKALVAR3,0
JE >L1
ADD AX,RF_RECORDLENGTH[SI]
ADC DX,0
L1:
MOV RF_LOKALVAR1,AX
MOV RF_LOKALVAR2,DX
CALL INTERN_SETFILEPOINTER
JC >L8
XOR CX,CX
MOV BX,RF_HANDLE[SI]
MOV AH,040H
INT 021H
JC >L8
MOV AX,04202H
MOV BX,RF_HANDLE[SI]
XOR DX,DX
XOR CX,CX
INT 021H
JC >L8
CMP AX,RF_LOKALVAR1
JNE >L1
CMP DX,RF_LOKALVAR2
JE >L2
L1:
MOV AX,RFILERECORDERROR
STC
JMP >L8
L2:
POP AX,DX
MOV RF_LASTRECORD[SI],AX
MOV RF_LASTRECORD[SI+2],DX
MOV AL,B RF_LOKALVAR3
MOV RF_FILEEMPTY[SI],AL
CALL INTERN_FLUSHRECORDFILE
L8:
JMP INTERN_ENDROUTINE
READRECORDFILEHEADER:
MOV AL,03FH
JMP >L1
WRITERECORDFILEHEADER:
MOV AL,040H
L1:
CALL INTERN_CHECKRFFILEOPEN
MOV B RF_LOKALVAR1,AL
MOV AX,RF_HEADERLENGTH[SI]
MOV DX,RF_HEADERLENGTH[SI+2]
OR DX,DX
JNZ >L0
OR AX,DX
JNZ >L1
L0:
MOV AX,RFILEHEADERERROR
JMP >L8
L1:
MOV BX,RF_HANDLE[SI]
XOR AX,AX
XOR DX,DX
CALL INTERN_SETFILEPOINTER
JC >L8
MOV CX,RF_HEADERLENGTH[SI]
ADD RF_FILEPOINTER[SI],CX
ADC RF_FILEPOINTER[SI+2],0
PUSH DS,DX
MOV DS,ES
MOV DX,DI
MOV AH,RF_LOKALVAR1
INT 021H
POP DX,DS
JC >L8
CMP AX,CX
JE >L9
MOV AL,RF_LOKALVAR1
CMP AL,03FH
MOV AX,RFILEREADERROR
JE >L8
MOV AX,RFILEWRITEERROR
L8:
STC
L9:
JMP INTERN_ENDROUTINE
#IF !INTERN_CHANGESIGN
INTERN_CHANGESIGN MACRO
NOT #1
NOT #2
ADD #2,01
ADC #1,0
#EM
#ENDIF
#IF !INTERN_MULLONGINT_S
INTERN_MULLONGINT_S EQU 01
MULLONGINT:
PUSH DI
PUSH SI
PUSH BP
MOV BP,SP
XOR SI,SI
OR CX,CX
JNS >L1
INTERN_CHANGESIGN CX,BX
INC SI
L1:
OR DX,DX
JNS >L1
INTERN_CHANGESIGN DX,AX
INC SI
L1:
PUSH SI
XOR DI,DI
XOR SI,SI
PUSH AX
PUSH DX
ADD AX,DX
MUL CX
MOV DI,AX
POP AX
MUL BX
ADD DI,AX
POP AX
MUL BX
ADD DX,DI
ADD AX,SI
L90:
POP SI
DEC SI
JNZ >L9
INTERN_CHANGESIGN DX,AX
L9:
MOV SP,BP
POP BP
POP SI
POP DI
RET
#ENDIF
#IF !INTERN_DIVLONGINT_S
INTERN_DIVLONGINT_S EQU 01
DIVLONGINT:
PUSH SI,DI,BP
PUSH BX
OR BX,CX
POP BX
STC
JZ >L9
XOR SI,SI
OR DX,DX
JNS >L1
INTERN_CHANGESIGN DX,AX
INC SI
L1:
OR CX,CX
JNS >L1
INTERN_CHANGESIGN CX,BX
INC SI
INC SI
L1:
PUSH SI
MOV DI,BX
MOV SI,CX
XOR BX,BX
XOR CX,CX
MOV BP,0021H
L0:
RCL BX,1
RCL CX,1
SUB BX,DI
SBB CX,SI
JNB >L1
ADD BX,DI
ADC CX,SI
L1:
CMC
RCL AX,1
RCL DX,1
DEC BP
JNZ L0
POP SI
OR SI,SI
JE >L90
CMP SI,3
JNE >L1
L0:
INTERN_CHANGESIGN CX,BX
JMP >L90
L1:
INTERN_CHANGESIGN DX,AX
CMP SI,1
JE L0
L90:
CLC
L9:
POP BP,DI,SI
RET
#ENDIF
#IF !INTERN_MAKE32BITADRESS_S
INTERN_MAKE32BITADRESS_S EQU 01
MAKE32BITADRESS:
PUSH CX
MOV CL,0CH
SHL DX,CL
PUSH AX
MOV CL,04H
SHR AX,CL
ADD DX,AX
POP AX
AND AX,0FH
POP CX
RET
#ENDIF
#IF !INTERN_MAKE20BITVALUE_S
INTERN_MAKE20BITVALUE_S EQU 01
MAKE20BITVALUE:
PUSH CX
MOV CL,04
PUSH DX
SHL DX,CL
ADD AX,DX
POP DX
PUSHF
MOV CL,12XD
SHR DX,CL
POPF
ADC DX,0
POP CX
RET
#ENDIF
INTERN_GETREALBUFFERSIZE:
PUSH DI
PUSH BX,AX,DX
MOV BX,RF_LASTRECORD[SI]
MOV CX,RF_LASTRECORD[SI+2]
CMP RF_FILEEMPTY[SI],0
JE >L1
ADD BX,RF_RECORDLENGTH[SI]
ADC CX,0
L1:
CMP DX,CX
JA >L1
JB >L2
CMP AX,BX
JBE >L2
L1:
XOR CX,CX
PUSH CX
JMP >L9
L2:
MOV DI,RF_BUFFERLENGTH[SI]
PUSH DI
ADD AX,DI
ADC DX,0
CMP DX,CX
JA >L1
JB >L9
CMP AX,BX
JBE >L9
L1:
SUB AX,BX
SBB DX,CX
NEG AX
POP CX
ADD AX,CX
PUSH AX
L9:
POP CX
POP DX,AX,BX
POP DI
RET
INTERN_FLUSHRECORDFILE:
MOV CX,RF_BUFFERCOUNT[SI]
LEA DI,RF_BUFFERS[SI]
L00:
TEST RF_BUFFERUSED[DI],RF_BUFFERWRITTEN
JZ >L1
PUSH CX
CALL INTERN_WRITERECORDBUFFER
POP CX
JC >L8
AND RF_BUFFERUSED[DI],NOT RF_BUFFERWRITTEN
L1:
ADD DI,TYPE RF_BUFFERHEADER
LOOP L00
PUSH CX,BX
MOV AH,030H
INT 021H
XCHG AH,AL
CMP AX,031EH
CMC
JNC >L1
MOV BX,RF_HANDLE[SI]
MOV AH,068H
INT 021H
L1:
POP CX,BX
L8:
RET
INTERN_TESTRECORD:
PUSH CX
CALL INTERN_GETRECORDADRESS
JC >L8
XOR CX,CX
CMP RF_FILEEMPTY[SI],CL
JE >L2
CMP RF_LASTRECORD[SI+2],DX
JB >L2
JA >L1
CMP RF_LASTRECORD[SI],AX
JB >L2
L1:
DEC CX
L2:
OR CX,CX
CLC
L8:
POP CX
RET
INTERN_SETFILEPOINTER:
MOV BX,RF_HANDLE[SI]
CMP AX,RF_FILEPOINTER[SI]
JNE >L1
CMP AX,RF_FILEPOINTER[SI+2]
JNE >L1
RET
L1:
PUSH DX,CX
MOV CX,DX
MOV DX,AX
MOV AX,04200H
INT 021H
POP CX,DX
JC RET
MOV RF_FILEPOINTER[SI],AX
MOV RF_FILEPOINTER[SI+2],DX
RET
INTERN_READRECORDBUFFER:
MOV B RF_LOKALVAR1,03FH
JMP >L1
INTERN_WRITERECORDBUFFER:
MOV B RF_LOKALVAR1,040H
L1:
PUSH DX,CX,BX,AX
MOV AX,RF_BUFFERFPOINTER[DI]
MOV DX,RF_BUFFERFPOINTER[DI+2]
CALL INTERN_GETREALBUFFERSIZE
CLC
JCXZ >L9
CALL INTERN_SETFILEPOINTER
JC >L8
ADD RF_FILEPOINTER[SI],CX
ADC RF_FILEPOINTER[SI+2],0
MOV AX,RF_BUFFERPTR[DI]
MOV DX,RF_BUFFERPTR[DI+2]
PUSH DS
MOV DS,DX
MOV DX,AX
MOV AH,B RF_LOKALVAR1
INT 021H
POP DS
JC >L8
CMP AX,CX
JE >L9
MOV AL,RF_LOKALVAR1
CMP AL,03FH
MOV AX,RFILEREADERROR
JE >L8
MOV AX,RFILEWRITEERROR
L8:
STC
POP BX
PUSH AX
L9:
POP AX,BX,CX,DX
RET
INTERN_PREPARERECORDFILE:
MOV RF_LOKALVAR1,AX
CALL INTERN_INITRF_TABLE
JC >L8
CALL INTERN_INITBUFFERRECORDS
PUSH DS,SI
MOV DS,ES
MOV SI,RF_L_DI
CALL INTERN_MAKEASCIIZ
PUSH AX
MOV AX,RF_LOKALVAR1
MOV CX,CS:CREATERFILEATTR
AND CX,027H
INT 021H
POP DX
MOV B[SI],DH
POP SI,DS
JC >L8
MOV BX,AX
MOV RF_HANDLE[SI],BX
MOV AX,04400H
INT 021H
JC >L8
TEST DL,080H
JZ >L8
MOV AX,RFILEDEVICEERROR
STC
L8:
RET
INTERN_INITRF_TABLE:
XOR AX,AX
MOV RF_FILEEMPTY[SI],AL
DEC AX
MOV RF_FILEPOINTER[SI],AX
MOV RF_FILEPOINTER[SI+2],AX
MOV AX,RF_HEADERLENGTH[SI]
MOV DX,RF_HEADERLENGTH[SI+2]
OR DX,DX
JS >L8
MOV RF_LASTRECORD[SI],AX
MOV RF_LASTRECORD[SI+2],DX
MOV BX,RF_RECORDLENGTH[SI]
CMP BX,2
JB >L8
MOV AX,RF_BUFFERCOUNT[SI]
CMP AX,MAXRF_BUFFER
JA >L8
CMP AX,1
JB >L8
MOV AX,RF_BUFFERLENGTH[SI]
OR AX,AX
JZ >L8
CMP AX,BX
JB >L8
XOR DX,DX
XOR CX,CX
PUSH BX,CX
CALL DIVLONGINT
POP CX,BX
PUSH AX
OR AX,DX
POP AX
JZ >L8
OR DX,DX
JNZ >L8
CALL MULLONGINT
MOV RF_BUFFERLENGTH[SI],AX
CLC
RET
L8:
MOV AX,RFILETABLEERROR
STC
RET
INTERN_INITBUFFERRECORDS:
PUSH SI
MOV CX,RF_BUFFERCOUNT[SI]
INC CX
LEA SI,RF_BUFFERS[SI]
L00:
MOV RF_BUFFERLRU[SI],CL
MOV RF_BUFFERUSED[SI],RF_BUFFERNOTUSED
MOV AX,RF_BUFFERPTR[SI]
MOV DX,RF_BUFFERPTR[SI+2]
PUSH AX
SHR AX,1
SHR AX,1
SHR AX,1
SHR AX,1
ADD DX,AX
POP AX
AND AX,0FH
MOV RF_BUFFERPTR[SI],AX
MOV RF_BUFFERPTR[SI+2],DX
ADD SI,TYPE RF_BUFFERHEADER
DEC CL
CMP CL,1
JNE L00
POP SI
RET
INTERN_GETBUFFER:
PUSH BP
MOV DI,SI
MOV CX,RF_BUFFERCOUNT[SI]
LEA DI,RF_BUFFERS[SI]
MOV BP,DI
L00:
PUSH CX
CMP RF_BUFFERUSED[DI],RF_BUFFERNOTUSED
JE >L02
MOV BX,RF_BUFFERFPOINTER[DI]
MOV CX,RF_BUFFERFPOINTER[DI+2]
CMP CX,DX
JA >L02
JB >L01
CMP BX,AX
JA >L02
L01:
ADD BX,RF_BUFFERLENGTH[SI]
ADC CX,0
CMP CX,DX
JB >L02
JA >L01
CMP BX,AX
JBE >L02
L01:
SUB AX,RF_BUFFERFPOINTER[DI]
SBB DX,RF_BUFFERFPOINTER[DI+2]
PUSH CX,BX
MOV CX,DX
MOV BX,AX
MOV AX,RF_BUFFERPTR[DI]
MOV DX,RF_BUFFERPTR[DI+2]
CALL MAKE20BITVALUE
ADD AX,BX
ADC DX,CX
CALL MAKE32BITADRESS
POP BX,CX
TEST RF_FLAGS[SI],RF_IGNORELRU
JZ >L020
POP CX
JMP >L9
L020:
MOV CX,RF_BUFFERCOUNT[SI]
INC CX
INC CX
MOV RF_BUFFERLRU[DI],CL
POP CX
JMP >L03
L02:
MOV CL,RF_BUFFERLRU[DI]
CMP CL,DS:RF_BUFFERLRU[BP]
IF B MOV BP,DI
ADD DI,TYPE RF_BUFFERHEADER
POP CX
LOOP L00
MOV DI,BP
TEST RF_FLAGS[SI],RF_IGNORELRU
JZ >L030
STC
JMP >L9
L030:
MOV CX,RF_BUFFERCOUNT[SI]
INC CX
INC CX
MOV RF_BUFFERLRU[DI],CL
STC
L03:
PUSHF
PUSH DI
MOV CX,RF_BUFFERCOUNT[SI]
MOV BX,CX
INC BX
LEA DI,RF_BUFFERS[SI]
L03:
DEC RF_BUFFERLRU[DI]
ADD DI,TYPE RF_BUFFERHEADER
LOOP L03
POP DI
POPF
L9:
POP BP
RET
INTERN_GETRECORDADRESS:
MOV BX,RF_RECORDLENGTH[SI]
XOR CX,CX
CALL MULLONGINT
OR DX,DX
JS >L8
ADD AX,RF_HEADERLENGTH[SI]
ADC DX,RF_HEADERLENGTH[SI+2]
JC >L8
JS >L8
CLC
RET
L8:
MOV AX,RFILERECORDERROR
STC
RET
#IF !INTERN_MAKEASCIIZ_S
INTERN_MAKEASCIIZ_S EQU 01
INTERN_MAKEASCIIZ:
CLD
XOR AH,AH
LODSB
MOV DX,SI
ADD SI,AX
XCHG AH,[SI]
RET
#ENDIF
#IF !INTERN_CMARK0
INTERN_CMARK0 EQU 01H
INTERN_CMARK1:
PUSH BP
MOV BP,SP
MOV BX,06H
SUB CH,[BP+SI]
SUB AH,[BX+SI]
DEC SP
DEC CX
INC DX
XOR AL,041H
CMP B[02820H],DH
INC BX
SUB W[BX+SI],SP
INC DX
CS AND B[BP+DI+043H],DL
DEC AX
INC BP
DEC BP
DEC BP
INC BP
PUSH DX
AND B[BP+SI],CH
SUB CH,[BP+SI]
POP DX
MOV SP,BP
POP BP
RET
#ENDIF